package gu.sql2java.excel;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;
import java.util.List;

import org.springframework.web.multipart.MultipartFile;

import gu.sql2java.excel.config.SheetConfig;

/**
 * EXCEL(.xls,.xlsx,.csv)文件导入接口
 * @author guyadong
 * @since 3.29.6
 */
public interface IExcelReader {

	/**
	 * 返回解析的记录列表,多工作薄导入时， 返回第一个工作薄解析配置对象的解析记录保存列表
	 */
	public <T> List<T> getRows();

	/**
	 * 设置解析记录保存列表为{@code null}忽略,
	 * 多工作薄导入时，设置第一个工作薄解析配置对象的解析记录保存列表
	 * @param <T>
	 * @param rows
	 */
	public <T> void setRows(List<T> rows);

	public void setSheetConfig(SheetConfig sheetConfig);

	public SheetConfig getSheetConfig();

	/**
	 * 从{@link InputStream}将导入数据记录
	 * @param inputStream
	 * @param charset 数据编码为{@code null}使用默认值
	 * @param format 文件格式,即文件后缀: .xls,xlxs,.cxv
	 * @throws IOException
	 */
	public void read(InputStream inputStream, Charset charset, String format) throws IOException;

	/**
	 * 从WEB上传文件导入数据到
	 * @param uplodFile
	 * @param charset 
	 * @throws IOException
	 */
	public void read(MultipartFile uplodFile, Charset charset) throws IOException;

	/**
	 * 从指定的文件导入Excel格式数据
	 * @param file
	 * @param charset 
	 * @throws IOException
	 */
	public void read(String file, Charset charset) throws IOException;

	/**
	 * 从指定的文件导入Excel格式数据
	 * @param file
	 * @param charset 
	 * @throws IOException
	 */
	public void read(File file, Charset charset) throws IOException;

}
